package org.abc.fund.controller.funds;

import org.abc.fund.dto.FundCompanyDTO;
import org.abc.fund.entity.funds.FundCompany;
import org.abc.fund.service.funds.FundCompanyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/fund-company")
public class FundCompanyController {

    @Autowired
    private FundCompanyService fundCompanyService;

    // 🔍 获取所有基金公司（可选模糊搜索）
    @GetMapping("/all")
    public List<FundCompany> getAllCompanies(@RequestParam(required = false) String name) {
        return fundCompanyService.getAllCompanies(name);
    }

    // ✅ 分页获取基金公司 DTO（可选关键词）
    @GetMapping("/page")
    public Page<FundCompanyDTO> getPagedCompanies(
            @RequestParam(required = false) String keyword,
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "10") int size
    ) {
        return fundCompanyService.getCompaniesDTOByPage(page, size, keyword);
    }

    // 🔍 根据标签筛选出包含所选标签的基金公司（返回扁平化 DTO）
    @GetMapping("/by-tags")
    public List<FundCompanyDTO> getCompaniesByTags(@RequestParam List<String> tags) {
        return fundCompanyService.getCompaniesByTags(tags);
    }

    // 📋 获取公司详情（包含基金列表）
    @GetMapping("/detail/{id}")
    public FundCompanyDTO getCompanyDetail(@PathVariable Long id) {
        return fundCompanyService.getCompanyDetail(id);
    }

    // 📋 获取某个公司旗下基金（用于表格展开）
    @GetMapping("/funds")
    public List<?> getFundsByCompanyName(@RequestParam String companyName) {
        return fundCompanyService.getFundsByCompanyName(companyName);
    }

    // ➕ 添加基金公司
    @PostMapping("/add")
    public FundCompany addCompany(@RequestBody FundCompany company) {
        return fundCompanyService.addCompany(company);
    }

    // ✏️ 修改基金公司
    @PutMapping("/update/{id}")
    public FundCompany updateCompany(@PathVariable Long id, @RequestBody FundCompany updated) {
        return fundCompanyService.updateCompany(id, updated);
    }

    // ❌ 删除基金公司
    @DeleteMapping("/delete/{id}")
    public void deleteCompany(@PathVariable Long id) {
        fundCompanyService.deleteCompany(id);
    }

    // 🔍 获取单个基金公司实体
    @GetMapping("/{id}")
    public FundCompany getCompany(@PathVariable Long id) {
        return fundCompanyService.getCompanyById(id);
    }
}
